做网站需要哪些工程师,手机做推广比较好的网站,怎样把在本地安装好的wordpress上传到服务器,推广做网站多少钱要求#xff1a;
① 页面写入超链接#xff0c;获取所有数据item#xff0c;显示在另一个页面#xff0c;1min内#xff0c;即使数据有变化#xff0c;页面内容不变#xff0c;1min后点击超链接可获取最新信息#xff1b;
② 使用middleware完成用户请求路径判断
① 页面写入超链接获取所有数据item显示在另一个页面1min内即使数据有变化页面内容不变1min后点击超链接可获取最新信息
② 使用middleware完成用户请求路径判断 request.path。如果是“/schedule/select/”或“/select/contact/”判断是否用户登录否 则重定向到login页面。
①
结果 代码
python manage.py startapp pro6_app
注册app
path(pro6/, include(pro6_app.urls, namespacepro6)),
views //
import datetimefrom django.core.paginator import Paginator, InvalidPage
from django.shortcuts import render
from django.views.decorators.cache import cache_pagefrom djangoProject.settings import PAGE_SIZE
from pro6_app.models import Departmentdef home(request):return render(request, home.html)cache_page(60)
def show(request):ds Department.get_all()page_num request.GET.get(page_num, default1)paginator Paginator(ds, PAGE_SIZE)try:data paginator.page(page_num)except InvalidPage:data paginator.page(1)time datetime.datetime.now()return render(request, show.html, {data: data, paginator: paginator, time: time})setting //
PAGE_SIZE 3
urls //
from django.urls import pathfrom .views import *app_name pro6urlpatterns [path(home/, home, namehome),path(show/, show, nameshow),
]
models //
# 迁移添加测试数据
from django.db import modelsclass Department(models.Model):name models.CharField(max_length64, verbose_name科室)month models.CharField(max_length2, verbose_name月)def __str__(self):return f{self.name}__{self.month}class Meta:verbose_name 安排表verbose_name_plural verbose_name sclassmethoddef get_all(cls):return cls.objects.all()admin //
from django.contrib import adminfrom pro6_app.models import Departmentmodels [Department
]admin.site.register(models)
templates //
headmeta charsetUTF-8titlehome/title
/head
body
a href{% url pro6:show %}input typebutton valueGet data
/a
/body
!DOCTYPE html
html langen
headmeta charsetUTF-8titleDepars/title
/head
body
table border1 aligncenter cellpadding0 cellspacing0theadtrthdepar/ththmonth/ththyear/ththremarks/th/tr/thead{% for i in data %}trtd{{ i.name }}/tdtd{{ i.month }}/tdtd2024/tdtdnull/td/tr{% endfor %}
/table
centera href{% url pro6:show %}?page_num1 stylecolor:orangeredFirst/a{% if data.has_previous %}a href{% url pro6:show %}?page_num{{ data.previous_page_number }} stylecolor:orangeredPrevious/a{% else %}a hrefjavascript:alert(We are at the beginning.)Previous/a{% endif %}{{ data.number }}/{{ paginator.num_pages }}{% if data.has_next %}a href{% url pro6:show %}?page_num{{ data.next_page_number }} stylecolor:orangeredNext/a{% else %}a hrefjavascript:alert(Boundary of the void.)Next/a{% endif %}a href{% url pro6:show %}?page_num{{ paginator.num_pages }} stylecolor:orangeredLast/a
/center
center
a href{% url pro6:show %}input typebutton valueRefresh
/a
hr
h6Help with scheduling troubles./h6
h6Have a nice day./h6
h6{{ time|date:H:i:s Y-m-d }}. Shanghai, China, Asia./h6/center
/body
/html
②
结果
1未登录直接进入test页面的contact或select按钮会跳转到登录页面 2正常流程注册成功→登录成功→test页面可select或contactsetting设置token过期时间是1day admin后台可见保存的加密后的token即pwd没有保存用户原始密码。 代码
沿用上述pro6_app, 已注册
models //
# admin 注册
class User(models.Model):name models.CharField(max_length32, uniqueTrue, verbose_nameName)pwd models.CharField(max_length128, verbose_namePassword)token models.CharField(max_length128, nullTrue)class Meta:verbose_name 网页用户verbose_name_plural verbose_name 们def __str__(self):return self.nameclassmethoddef get_list(cls, **kwargs):filters {}if kwargs.get(name):filters[name] kwargs.get(name)if kwargs.get(pwd):filters[pwd] kwargs.get(pwd)if kwargs.get(token):filters[token] kwargs.get(token)return cls.objects.filter(**filters)classmethoddef create_one(cls, **kwargs):return cls.objects.create(namekwargs.get(name),pwdkwargs.get(pwd))views //
# SESSION_COOKIE_AGE 3600 * 24 # 60 * 60 * 24
def register(request):if request.method GET:return render(request, pro6_regis.html)if request.method POST:name request.POST.get(name)pwd hash(request.POST.get(pwd))User.create_one(**{name: name, pwd: pwd})return redirect(reverse(pro6:login))def login(request):if request.method GET:return render(request, pro6_login.html)if request.method POST:name request.POST.get(name)pwd hash(request.POST.get(pwd))filters {name: name,pwd: pwd}users User.get_list(**filters)if users:user users.first()md5 hashlib.md5()md5.update(name.encode(utf-8))token md5.hexdigest() str(time.time())user.token tokenuser.save()response redirect(reverse(pro6:test))response.set_cookie(user_token, token)return responseelse:return HttpResponse(h5 stylecolor: orangeWrong Info../h5)def test_view(request):return render(request, pro6_test.html)def contact_view(request):return HttpResponse(h5 stylecolor:orangeget in touch/h5)def select_view(request):return HttpResponse(h5 stylecolor:orangeselect it/h5)def del_user_token(request):response redirect(reverse(pro6:test))response.delete_cookie(user_token)return responsetemplates //
register
form action methodpost{% csrf_token %}UserName:input typetext namename brPassword:input typepassword namepwd brinput typesubmit valueRegister
/form
login
form action methodpost{% csrf_token %}UserName:input typetext namename brPassword:input typepassword namepwd brinput typesubmit valueLogin
/form
test
body
a href{% url pro6:select %}select it/a
br
a href{% url pro6:contact %}contact it/a
br
a href{% url pro6:del %} stylecolor:purple delete user token/a
/body urls // path(regis/, register, nameregis),path(login/, login, namelogin),path(test/, test_view, nametest),path(schedule/contact/, contact_view, namecontact),path(schedule/select/, select_view, nameselect),path(del/, del_user_token, namedel),
middleware //
# setting注册
class LoginMiddleWare(MiddlewareMixin):def process_request(self, request):target_path [/pro6/schedule/select/,/pro6/schedule/contact/]print(request.path)if request.path in target_path:print(in judge flag)try:user_token request.COOKIES[user_token]users User.get_list(tokenuser_token)print(verified)if not users:return HttpResponse(Token expired.)except:return redirect(reverse(pro6:login))