commit
3a82834315
@ -0,0 +1,6 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JavaScriptSettings">
|
||||
<option name="languageLevel" value="ES6" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.5" project-jdk-type="Python SDK" />
|
||||
</project>
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/news_recommend.iml" filepath="$PROJECT_DIR$/.idea/news_recommend.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="a1aea99b-0952-4918-8d93-29bf71c9bca8" name="Default Changelist" comment="" />
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="DjangoConsoleOptions" custom-start-script="import sys; print('Python %s on %s' % (sys.version, sys.platform)) import django; print('Django %s' % django.get_version()) sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS]) if 'setup' in dir(django): django.setup() import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)">
|
||||
<option name="myCustomStartScript" value="import sys; print('Python %s on %s' % (sys.version, sys.platform)) import django; print('Django %s' % django.get_version()) sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS]) if 'setup' in dir(django): django.setup() import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)" />
|
||||
</component>
|
||||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env python
|
||||
"""Django's command-line utility for administrative tasks."""
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'news_recommend.settings')
|
||||
try:
|
||||
from django.core.management import execute_from_command_line
|
||||
except ImportError as exc:
|
||||
raise ImportError(
|
||||
"Couldn't import Django. Are you sure it's installed and "
|
||||
"available on your PYTHONPATH environment variable? Did you "
|
||||
"forget to activate a virtual environment?"
|
@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class NewsConfig(AppConfig):
|
||||
name = 'news'
|
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/python
|
||||
# coding=utf-8
|
||||
#########################################
|
||||
# kNN: k Nearest Neighbors
|
||||
|
||||
# 输入: newInput: (1xN)的待分类向量
|
||||
# dataSet: (NxM)的训练数据集
|
||||
# labels: 训练数据集的类别标签向量
|
||||
# k: 近邻数
|
||||
|
||||
# 输出: 可能性最大的分类标签
|
||||
#########################################
|
||||
|
||||
from numpy import *
|
||||
import operator
|
@ -0,0 +1,15 @@
|
||||
# Generated by Django 2.2.19 on 2021-05-11 11:50
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='news',
|
@ -0,0 +1,15 @@
|
||||
# Generated by Django 2.2.19 on 2021-05-11 12:05
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('news', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='news',
|
||||
name='count',
|
@ -0,0 +1,15 @@
|
||||
# Generated by Django 2.2.19 on 2021-05-12 01:14
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('news', '0002_auto_20210511_2005'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='NewsType',
|
||||
fields=[
|
@ -0,0 +1,15 @@
|
||||
from django.db import models
|
||||
|
||||
|
||||
# Create your models here.
|
||||
|
||||
class News(models.Model): # 新闻内容表
|
||||
id = models.AutoField(db_column='id', primary_key=True) # Field name made lowercase.
|
||||
url = models.CharField(db_column='url', max_length=260) # 标题
|
||||
title = models.CharField(db_column='title', max_length=60, ) # Field name made lowercase.
|
||||
comment = models.TextField(db_column='comment')
|
||||
count = models.IntegerField(default=0)
|
||||
|
||||
class Meta:
|
||||
managed = True
|
||||
db_table = 'news'
|
@ -0,0 +1,15 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
__version__ = '1.0.0.0'
|
||||
|
||||
import re
|
||||
from math import sqrt
|
||||
import KNN
|
||||
import jieba
|
||||
from pandas import *
|
||||
from sklearn.metrics import pairwise_distances
|
||||
from bs4 import BeautifulSoup
|
||||
from sklearn import feature_extraction
|
||||
from sklearn.feature_extraction.text import TfidfTransformer, TfidfVectorizer
|
||||
|
||||
|
@ -0,0 +1,7 @@
|
||||
from django.urls import path, include
|
||||
from . import views
|
||||
urlpatterns = [
|
||||
path('index/',views.index),
|
||||
path('details/<int:news_id>',views.details),
|
||||
path('tuijian/',views.tuijian),
|
||||
]
|
@ -0,0 +1,15 @@
|
||||
from django.http import JsonResponse
|
||||
from django.shortcuts import render
|
||||
|
||||
from utils.mypage import Pagination
|
||||
from utils.common import my_login
|
||||
from .models import News,NewsType
|
||||
from user.models import User
|
||||
|
||||
news_type = ['时政','体育','社会','科技','财经','宠物','法律','房产','健康','军事','科学','娱乐','教育']
|
||||
# Create your views here.
|
||||
dict_news = dict.fromkeys(news_type,0)
|
||||
|
||||
@my_login
|
||||
def index(request):
|
||||
new_list = News.objects.all()
|
@ -0,0 +1,15 @@
|
||||
/*
|
||||
Navicat Premium Data Transfer
|
||||
|
||||
Source Server : localhost
|
||||
Source Server Type : MySQL
|
||||
Source Server Version : 80023
|
||||
Source Host : localhost:3306
|
||||
Source Schema : news_recommend
|
||||
|
||||
Target Server Type : MySQL
|
||||
Target Server Version : 80023
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 14/05/2021 17:41:12
|
||||
*/
|
@ -0,0 +1,2 @@
|
||||
import pymysql
|
||||
pymysql.install_as_MySQLdb()
|
@ -0,0 +1,15 @@
|
||||
"""
|
||||
Django settings for news_recommend project.
|
||||
|
||||
Generated by 'django-admin startproject' using Django 2.2.19.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/2.2/topics/settings/
|
||||
|
||||
For the full list of settings and their values, see
|
||||
https://docs.djangoproject.com/en/2.2/ref/settings/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
@ -0,0 +1,15 @@
|
||||
"""news_recommend URL Configuration
|
||||
|
||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||
https://docs.djangoproject.com/en/2.2/topics/http/urls/
|
||||
Examples:
|
||||
Function views
|
||||
1. Add an import: from my_app import views
|
||||
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
||||
Class-based views
|
||||
1. Add an import: from other_app.views import Home
|
||||
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
||||
Including another URLconf
|
||||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
@ -0,0 +1,15 @@
|
||||
"""
|
||||
WSGI config for news_recommend project.
|
||||
|
||||
It exposes the WSGI callable as a module-level variable named ``application``.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'news_recommend.settings')
|
||||
|
@ -0,0 +1,15 @@
|
||||
*, *:before, *:after {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Open Sans', Helvetica, Arial, sans-serif;
|
||||
background: #ededed;
|
||||
}
|
||||
|
||||
input, button {
|
||||
border: none;
|
||||
outline: none;
|
||||
background: none;
|
@ -0,0 +1,15 @@
|
||||
@keyframes showSweetAlert {
|
||||
0% {
|
||||
transform: scale(0.7);
|
||||
}
|
||||
45% {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
80% {
|
||||
transform: scale(0.95);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
@keyframes hideSweetAlert {
|
@ -0,0 +1,4 @@
|
||||
$('#datetimepicker').datetimepicker({
|
||||
format: 'YYYY-MM-DD hh:mm',
|
||||
locale: moment.locale('zh-cn')
|
||||
});
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,8 @@
|
||||
function addNew()
|
||||
{
|
||||
var iframe = document.getElementById('iframe_a');
|
||||
//获取当前网址
|
||||
var a =window.document.location.href;
|
||||
// 127.0.0.1:8000就等价于.idea下面那个newSystem文件夹
|
||||
iframe.setAttribute("src" , "http://127.0.0.1:8000/static/localHtml/addNew.html" );
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
document.querySelector('.img__btn').addEventListener('click', function() {
|
||||
document.querySelector('.content').classList.toggle('s--signup')
|
||||
})
|
@ -0,0 +1,15 @@
|
||||
;(function(window, document, undefined) {
|
||||
"use strict";
|
||||
|
||||
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
var defaultParams = {
|
||||
title: '',
|
||||
text: '',
|
||||
type: null,
|
||||
allowOutsideClick: false,
|
||||
showConfirmButton: true,
|
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<!-- include libraries(jQuery, bootstrap) -->
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
|
||||
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
|
||||
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
|
||||
|
||||
<!-- include summernote css/js -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.15/dist/summernote.min.css" rel="stylesheet">
|
||||
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.15/dist/summernote.min.js"></script>
|
@ -0,0 +1,15 @@
|
||||
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>头像</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>首页</title>
|
||||
|
||||
<!-- 新 Bootstrap 核心 CSS 文件 -->
|
||||
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
|
||||
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
|
||||
|
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>修改个人信息</title>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
|
||||
|
||||
|
||||
<!-- 新 Bootstrap 核心 CSS 文件 -->
|
||||
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
|
||||
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
|
||||
|
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>发布者个人页面</title>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
|
||||
|
||||
|
||||
<!-- 新 Bootstrap 核心 CSS 文件 -->
|
||||
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
|
||||
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
|
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
{% load static %} <!-- 要使用static文件夹下的静态资源, 必须在头部声明 -->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>首页</title>
|
||||
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||
<style>
|
||||
.test li {
|
||||
display: inline;
|
||||
list-style: none;
|
||||
margin: 0 20px;
|
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
{% load static %} <!-- 要使用static文件夹下的静态资源, 必须在头部声明 -->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>首页</title>
|
||||
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||
<style>
|
||||
.test li {
|
||||
display: inline;
|
||||
list-style: none;
|
||||
margin: 0 20px;
|
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
{% load static %}
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>login</title>
|
||||
<link rel="stylesheet" href="../static/css/style1.css">
|
||||
<link rel="stylesheet" type="text/css" href="../static/css/sweetalert.css">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="content">
|
||||
<div class="form sign-in">
|
||||
<h2>新闻推荐系统——登录</h2>
|
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
{% load static %} <!-- 要使用static文件夹下的静态资源, 必须在头部声明 -->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>首页</title>
|
||||
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||
<style>
|
||||
.test li {
|
||||
display: inline;
|
||||
list-style: none;
|
||||
margin: 0 20px;
|
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
{% load static %} <!-- 要使用static文件夹下的静态资源, 必须在头部声明 -->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>首页</title>
|
||||
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||
<link rel="stylesheet" href="/static/css/sweetalert.css"/>
|
||||
|
||||
<style>
|
||||
.test li {
|
||||
display: inline;
|
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
{% load static %} <!-- 要使用static文件夹下的静态资源, 必须在头部声明 -->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>首页</title>
|
||||
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||
<style>
|
||||
.test li {
|
||||
display: inline;
|
||||
list-style: none;
|
||||
margin: 0 20px;
|
@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class UserConfig(AppConfig):
|
||||
name = 'user'
|
@ -0,0 +1,15 @@
|
||||
# Generated by Django 2.2.19 on 2021-05-11 11:50
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='User',
|
@ -0,0 +1,13 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
class User(models.Model):
|
||||
id = models.AutoField(db_column='id', primary_key=True) # Field name made lowercase.
|
||||
username = models.CharField(verbose_name='username',max_length=64)
|
||||
password = models.CharField(verbose_name='password',max_length=64)
|
||||
phone = models.CharField(max_length=11,default='')
|
||||
hobby = models.CharField(max_length=255,default='')
|
||||
create_time = models.DateTimeField(max_length=50, auto_now_add=True)
|
||||
class Meta:
|
||||
managed = True
|
||||
db_table = 'user'
|
@ -0,0 +1,4 @@
|
||||
li = ['admin','zhangsan','lisi']
|
||||
dict_values = dict.fromkeys(li,0)
|
||||
dict_values['admin'] = 1
|
||||
print(all(value == 0 for value in dict_values.values()))
|
@ -0,0 +1,5 @@
|
||||
from django.urls import path
|
||||
from . import views
|
||||
urlpatterns =[
|
||||
path('',views.show_user)
|
||||
]
|
@ -0,0 +1,15 @@
|
||||
from django.http import JsonResponse
|
||||
from django.shortcuts import render, redirect
|
||||
from .models import User
|
||||
# Create your views here.
|
||||
from utils.mypage import Pagination
|
||||
|
||||
|
||||
def logout(request):
|
||||
request.session.flush()
|
||||
return redirect('/login')
|
||||
|
||||
|
||||
# 将 login 请求跳转到login.html
|
||||
def login(request):
|
||||
return render(request, 'login.html')
|
@ -0,0 +1,14 @@
|
||||
# 登陆用的装饰器,限制未登录自动跳转到登录页面
|
||||
from django.http import HttpResponseRedirect
|
||||
|
||||
|
||||
def my_login(func):
|
||||
def inner(*args, **kwargs):
|
||||
username = args[0].session.get('user_name')
|
||||
print('username',username)
|
||||
if username:
|
||||
return func(*args, **kwargs)
|
||||
else:
|
||||
return HttpResponseRedirect('/login')
|
||||
|
||||
return inner
|
@ -0,0 +1,15 @@
|
||||
class Pagination(object):
|
||||
def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):
|
||||
"""
|
||||
封装分页相关数据
|
||||
:param current_page: 当前页
|
||||
:param all_count: 数据库中的数据总条数
|
||||
:param per_page_num: 每页显示的数据条数
|
||||
:param pager_count: 最多显示的页码个数
|
||||
|
||||
用法:
|
||||
queryset = model.objects.all()
|
||||
page_obj = Pagination(current_page,all_count)
|
||||
page_data = queryset[page_obj.start:page_obj.end]
|
||||
获取数据用page_data而不再使用原始的queryset
|
||||
获取前端分页样式用page_obj.page_html
|
Loading…
Reference in new issue