学习周报

一、django学习情况

完成6-4到6-12,7-1到7-4的学习

1.用from实现用户登录功能

1.1将基于函数实现的登录改为基于类来实现用户登录

(1)在views中from django.views.generic.base import View
(2)改变urls中的配置

学习周报_第1张图片

2.1引入form

form是将用户提交的表单做一些预处理,比如判断逻辑,用form来对用户提交的表单做判断,通过前端验证减少后端代码

(1)在users文件下新建forms.py
(2)配置forms.py

(3)完善class LoginView,login.html

学习周报_第2张图片

(4)最终实现用户名、密码输入不符规范时,form会进行判断并自动返回错误提示

学习周报_第3张图片

2.session和cookie自动登录机制

2.1无状态请求和有状态请求

学习周报_第4张图片

学习周报_第5张图片

session针对无状态请求,cookie针对有状态请求。

cookie本质是本地浏览器的存储机制,存储在浏览器中,类似缓存,会存储服务器返回的任何信息,以键值对的形式。

缺陷,不安全性,不能将用户所有信息存储在本地,被窃取后会得到用户名和密码,出于安全,服务器在返回id时会使用到session机制(服务器根据用户名和密码生成一段随机字符串,有过期时间,存储在服务器端,将这个session发给用户,用户存储在cookie中,用户在下一次请求中,将该session带回到服务器,服务器通过session的id查询用户,以此来做标记)django利用这种session和cookie机制来实现用户的自动登录。

3.用户注册和找回密码

3.1用户注册

学习周报_第6张图片

在用户注册时遇到一个问题,也就是用户在填入注册信息后,一直无法进入到if register_form.is_valid():后面的代码,userprofile中的用户数据一直无法得到更新,后面的环节就很难进行,因此只好按照视频先把代码都添上去了,暂且先不管这个问题。

询问老师说是代码的问题,但检查了许多遍也没有找到错误的代码,为了不拖节奏先忽略这一部分,继续后面的课程,等待老师的回复后再来完善。

3.2找回密码

学习周报_第7张图片

学习周报_第8张图片

4.django templates模块继承

4.1block函数

利用block和endblock实现对base.html的部分继承,因为在网页中,一些数据图片等是时刻变动的,而另一些是不变的。通过block和endblock来部分继承,可以有效减少代码数,也能实现内容的动态变动。

4.2课程机构列表展示

(1)在后台xadmin中添加城市

学习周报_第9张图片

(2)在后台xadmin中添加课程机构

学习周报_第10张图片

(3)上传图片并配置后在网页中显示

最终成果如下:

学习周报_第11张图片

之前没有准备图片,所以随便上传的几张图片(也只有这几张了)

二、python学习情况

摘自完成的一道综合编程题

1.要求

使用字典和列表型变量完成学生通讯录管理,名单由考生目录下文件 address.txt 给出,每行是一个学生的信息。示例如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

学号,姓名,电话号码,地址‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

101,aa,12345678,Beijing‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

102,bb,23456781,shanghai‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬问题1:参照代码模板完善代码,实现下述功能。在屏幕上显示功能菜单,功能菜单示例如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

  1. 显示所有信息
  2. 追加信息
  3. 删除信息

请输入数字1-3选择功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬接收用户输入数字选择功能,如果输入错误,要求用户重新输入。如果输入正确,在屏幕上显示提示语句:您选择了功能1/2/3. (5分)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬问题2:在问题1的代码基础上完善代码,实现下述功能。实现功能1——当用户选择1的时候,从通讯录文件读取信息,显示所有信息。(5分)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

示例如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

  1. 显示所有信息
  2. 追加信息
  3. 删除信息

请输入数字1-3选择功能:1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

101,aa,12345678,Beijing‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

102,bb,23456781,shanghai‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬问题3:在问题2的代码基础上完善代码,实现下述功能。实现功能2——追加信息。让用户从键盘输入一个学生的信息,用逗号隔开。在屏幕上显示追加后的所有信息,并将信息写入文件 new_address.txt 中,文件格式与 address 相同。(10分)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

New_address.txtd内容示例如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

101,aa,12345678,Beijing‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

102,bb,23456781,shanghai‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

103,cc,34567,tianj

2.解决代码

在解决问题1的时候使用到flag的方法,flag默认为1,且flag为1时持续输出要求用户输入的信息。用户正确输入后flag赋值为0,非法输入和超过意义范围flag都为1。

最终代码:

def display():
    fi = open("address.txt",'r')
    txt = fi.readlines()
    for i in txt:
        print(i)
    fi.close()


def insertrec():
   fi = open("address.txt",'r')
   fo = open("new_address.txt",'w')
   la=[]
   for l in fi:
       la.append(l.replace('\n',''))
   rec = input("请输入要插入的信息,以逗号隔开,示例:103, cc, 34567812, tianjing:")
   la.append(rec)
   for l in la:
       fo.write(l)
       fo.write('\n')
   fi.close()
   fo.close()

   
menu=["1. 显示所有信息","2. 追加信息","3. 删除信息"]
flag = 1
while flag:
    for i in menu:
        print(i)
    try:
        ch = int(input("请输入数字1-3选择功能:"))
        flag = 0
    except:
        flag = 1
    if ch < 1 or ch > 3:
        flag = 1
print("您选择了功能", ch)
if ch ==1:
    display()
elif ch==2:
    insertrec()
elif ch ==3:
    pass

 

你可能感兴趣的:(学习周报)