欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:前端 sql 開發(fā)實(shí)踐6

柚子快報(bào)激活碼778899分享:前端 sql 開發(fā)實(shí)踐6

http://yzkb.51969.com/

要求:

① 頁面寫入超鏈接,獲取所有數(shù)據(jù)item,顯示在另一個(gè)頁面,1min內(nèi),即使數(shù)據(jù)有變化,頁面內(nèi)容不變,1min后點(diǎn)擊超鏈接可獲取最新信息;

② 使用middleware完成用戶請(qǐng)求路徑判斷 (request.path)。如果是“/schedule/select/”或“/select/contact/”,判斷是否用戶登錄,否 則重定向到login頁面。

結(jié)果:

代碼:

python manage.py startapp pro6_app

注冊(cè)app

path('pro6/', include('pro6_app.urls', namespace="pro6")),

views //

import datetime

from django.core.paginator import Paginator, InvalidPage

from django.shortcuts import render

from django.views.decorators.cache import cache_page

from djangoProject.settings import PAGE_SIZE

from pro6_app.models import Department

def home(request):

return render(request, "home.html")

@cache_page(60)

def show(request):

ds = Department.get_all()

page_num = request.GET.get("page_num", default=1)

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 path

from .views import *

app_name = "pro6"

urlpatterns = [

path('home/', home, name="home"),

path('show/', show, name="show"),

]

models //

#?遷移,添加測(cè)試數(shù)據(jù)

from django.db import models

class Department(models.Model):

name = models.CharField(max_length=64, verbose_name="科室")

month = models.CharField(max_length=2, verbose_name="月")

def __str__(self):

return f"{self.name}__{self.month}"

class Meta:

verbose_name = "安排表"

verbose_name_plural = verbose_name + 's'

@classmethod

def get_all(cls):

return cls.objects.all()

admin //

from django.contrib import admin

from pro6_app.models import Department

models = [

Department

]

admin.site.register(models)

templates //

home

Depars

{% for i in data %}

{% endfor %}

deparmonthyearremarks
{{ i.name }}{{ i.month }}2024null

First

{% if data.has_previous %}

Previous

{% else %}

Previous

{% endif %}

{{ data.number }}/{{ paginator.num_pages }}

{% if data.has_next %}

Next

{% else %}

Next

{% endif %}

Last


Help with scheduling troubles.

Have a nice day.

{{ time|date:'H:i:s Y-m-d' }}. Shanghai, China, Asia.

結(jié)果:

1)未登錄直接進(jìn)入test頁面的contact或select按鈕,會(huì)跳轉(zhuǎn)到登錄頁面

2)正常流程:注冊(cè)成功→登錄成功→test頁面可select或contact(setting設(shè)置token過期時(shí)間是1day)

admin后臺(tái)可見保存的加密后的token即pwd,沒有保存用戶原始密碼。

代碼:

(沿用上述pro6_app, 已注冊(cè))

models //

# admin 注冊(cè)

class User(models.Model):

name = models.CharField(max_length=32, unique=True, verbose_name="Name")

pwd = models.CharField(max_length=128, verbose_name="Password")

token = models.CharField(max_length=128, null=True)

class Meta:

verbose_name = "網(wǎng)頁用戶"

verbose_name_plural = verbose_name + '們'

def __str__(self):

return self.name

@classmethod

def 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)

@classmethod

def create_one(cls, **kwargs):

return cls.objects.create(

name=kwargs.get("name"),

pwd=kwargs.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 = token

user.save()

response = redirect(reverse('pro6:test'))

response.set_cookie("user_token", token)

return response

else:

return HttpResponse("

Wrong Info..
")

def test_view(request):

return render(request, "pro6_test.html")

def contact_view(request):

return HttpResponse("

get in touch
")

def select_view(request):

return HttpResponse("

select it
")

def del_user_token(request):

response = redirect(reverse('pro6:test'))

response.delete_cookie("user_token")

return response

templates //

register

{% csrf_token %}

UserName:

Password:

login

{% csrf_token %}

UserName:

Password:

test

select it


contact it


delete user token

urls //

path('regis/', register, name="regis"),

path('login/', login, name="login"),

path('test/', test_view, name="test"),

path('schedule/contact/', contact_view, name='contact'),

path('schedule/select/', select_view, name='select'),

path('del/', del_user_token, name='del'),

middleware //

# setting注冊(cè)

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(token=user_token)

print('verified')

if not users:

return HttpResponse("Token expired.")

except:

return redirect(reverse("pro6:login"))

柚子快報(bào)激活碼778899分享:前端 sql 開發(fā)實(shí)踐6

http://yzkb.51969.com/

文章來源

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19199769.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄