先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
正文
urlpatterns = [
path(‘reg’, views.reg_view)
]
def reg_view(request):
注册
if request.method == ‘GET’:
GET 返回界面
return render(request, ‘user/register.html’)
elif request.method == ‘POST’:
POST 处理提交数据
username = request.POST[‘username’]
password_1 = request.POST[‘password_1’]
password_2 = request.POST[‘password_2’]
1. 两个密码要保持一致
if password_1 != password_2:
return HttpResponse(‘两次密码输入不一致’)
2. 用户名是否可用
old_users = User.objects.filter(username=username)
if old_users:
return HttpResponse(‘用户名已注册’)
3. 插入数据【明文密码处理】
User.objects.create(username=username, password=password_1)
return HttpResponse(‘注册成功’)
基础代码编写完成后,进行测试成功
======================================================================
-
密码如何处理
-
插入问题
-
产品经理要求注册则免登录一天,如何实现
哈希算法 —— 给定明文,计算出一段定长的,不可逆的值
7.1.1. 特点
-
定长输出:不管明文输入长度为多少,哈希值都是定长的。md5 - 32位16进制
-
不可逆:无法反向计算出对应的明文
-
雪崩效应:输入改变,输出必然变
7.1.2. 使用场景
-
密码加密
-
文件完整性校验
7.1.3. 如何使用
python3内置hashlib
哈希算法包
import hashlib
m = hashlib.md5()
m.update(b’123456’)
m.hexdigest()
如果想要生成别的哈希值,需要重新生成hashlib…。不然就是字符串拼接
7.1.4. 密码加密
7.1.5. 测试
重新注册查看数据库,存储加密后的密码
在数据进行插入执行create操作的时候,如果并发量高了,多用户同时注册,可能会出现同时执行create的情况,如果申请用户名一致,则会报错。
解决方案:
在插入的时候,try…catch…一下
try:
User.objects.create(username=username, password=password)
except Exception as e:
有可能报错 重复插入【唯一索引注意并发写入问题】
print(‘–create user error %s’ % e)
return HttpResponse(‘用户名已注册’)
return HttpResponse(‘注册成功’)
在session中存储用户信息
免登录一天
request.session[‘username’] = username
request.session[‘uid’] = user.id
=================================================================
-
url:/user/login
-
视图函数:login_view
-
模板位置:templates/user/login.html
-
页面样式:
-
流程:
-
发送GET请求的话,返回界面
-
点击登录发送POST请求,进行登录
用户名:
密码:
记住用户名
from django.urls import path
from . import views
urlpatterns = [
path(‘reg’, views.reg_view),
path(‘login’, views.login_view)
]
如果点击记住用户名
,则在浏览器端存储cookies
def login_view(request):
登录
if request.method == ‘GET’:
return render(request, ‘user/login.html’)
elif request.method == ‘POST’:
username = request.POST[‘username’]
password = request.POST[‘password’]
try:
user = User.objects.get(username=username)
except Exception as e:
print(‘–login user error %s’ % e)
return HttpResponse(‘用户名或密码错误’)
比对密码
m = hashlib.md5()
m.update(password.encode())
if m.hexdigest() != user.password:
return HttpResponse(‘用户名或密码错误’)
记录会话状态
request.session[‘username’] = username
request.session[‘uid’] = user.id
resp = HttpResponse(‘登录成功’)
判断用户是否点选了’记录用户名’
if ‘remember’ in request.POST:
点选了 → Cookies 存储 username,uid 时间 3
resp.set_cookie(‘username’, username, 3600243)
resp.set_cookie(‘uid’, user.id, 3600243)
return resp
======================================================================
用户登录流程
获取界面后
-
请求登录界面
-
服务器端检查session
-
session有数据的话,直接跳转主界面
-
session没有数据的话,检查浏览器端cookie,如果cookie有数据,跳转主界面
-
session没有数据、cookie没有数据的话,跳转登陆界面
def login_view(request):
登录
if request.method == ‘GET’:
检查登录状态,如果登陆了,显示’已登录’
if request.session.get(‘username’) and request.session.get(‘uid’):
return HttpResponse(‘已登录’)
检查Cookies
c_username = request.COOKIES.get(‘username’)
c_uid = request.COOKIES.get(‘uid’)
if c_username and c_uid:
回写session
request.session[‘username’] = c_username
request.session[‘uid’] = c_uid
return HttpResponse(‘已登录’)
return render(request, ‘user/login.html’)
elif request.method == ‘POST’:
···
=================================================================
-
url:/index
-
视图函数:index_view
-
模板位置:templates/index/index.html
-
界面样式
10.1.1. 生成项目
$ python3 manage.py startapp index
10.1.2. 注册
{% if request.session.username %}
欢迎{{ request.session.username }}
{% else %}
{% if request.COOKIES.username %}
欢迎{{ request.COOKIES.username }}
{% else %}
{% endif %}
{% endif %}
def index_view(request):
return render(request, ‘index/index.html’)
改为跳转到首页
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from .models import User
import hashlib
Create your views here.
def reg_view(request):
注册
if request.method == ‘GET’:
GET 返回界面
return render(request, ‘user/register.html’)
elif request.method == ‘POST’:
POST 处理提交数据
username = request.POST[‘username’]
password_1 = request.POST[‘password_1’]
password_2 = request.POST[‘password_2’]
1. 两个密码要保持一致
if password_1 != password_2:
return HttpResponse(‘两次密码输入不一致’)
哈希算法 —— 给定明文,计算出一段定长的,不可逆的值 md5 sha256
m = hashlib.md5()
m.update(password_1.encode())
password = m.hexdigest()
2. 用户名是否可用
old_users = User.objects.filter(username=username)
if old_users:
return HttpResponse(‘用户名已注册’)
3. 插入数据【明文密码处理】
try:
user = User.objects.create(username=username, password=password)
except Exception as e:
有可能报错 重复插入【唯一索引注意并发写入问题】
print(‘–create user error %s’ % e)
return HttpResponse(‘用户名已注册’)
免登录一天
request.session[‘username’] = username
request.session[‘uid’] = user.id
TODO:修改session存储时间为1天
return HttpResponse(‘注册成功’)
return HttpResponseRedirect(‘/index’)
def login_view(request):
登录
if request.method == ‘GET’:
检查登录状态,如果登陆了,显示’已登录’
if request.session.get(‘username’) and request.session.get(‘uid’):
return HttpResponse(‘已登录’)
return HttpResponseRedirect(‘/index’)
检查Cookies
c_username = request.COOKIES.get(‘username’)
c_uid = request.COOKIE.get(‘uid’)
if c_username and c_uid:
回写session
request.session[‘username’] = c_username
request.session[‘uid’] = c_uid
return HttpResponse(‘已登录’)
return HttpResponseRedirect(‘/index’)
return render(request, ‘user/login.html’)
elif request.method == ‘POST’:
username = request.POST[‘username’]
password = request.POST[‘password’]
try:
user = User.objects.get(username=username)
except Exception as e:
print(‘–login user error %s’ % e)
return HttpResponse(‘用户名或密码错误’)
比对密码
m = hashlib.md5()
m.update(password.encode())
if m.hexdigest() != user.password:
return HttpResponse(‘用户名或密码错误’)
记录会话状态
request.session[‘username’] = username
request.session[‘uid’] = user.id
resp = HttpResponse(‘登录成功’)
resp = HttpResponseRedirect(‘/index’)
判断用户是否点选了’记录用户名’
if ‘remember’ in request.POST:
点选了 → Cookies 存储 username,uid 时间 3
resp.set_cookie(‘username’, username, 3600243)
resp.set_cookie(‘uid’, user.id, 3600243)
return resp
==================================================================
-
url:/user/logout
-
视图函数:logout_view
-
模板位置:无
-
界面:点击登陆后的网页网站中"退出登录"触发退出;成功退出后302跳转至网站首页
from django.urls import path
from . import views
urlpatterns = [
path(‘reg’, views.reg_view),
path(‘login’, views.login_view),
path(‘logout’, views.logout_view)
]
def logout_view(request):
删除session值
if ‘username’ in request.session:
del request.session[‘username’]
if ‘uid’ in request.session:
del request.session[‘uid’]
检查cookie
resp = HttpResponseRedirect(‘/index’)
if ‘username’ in request.COOKIES:
resp.delete_cookie(‘username’)
if ‘uid’ in request.COOKIES:
resp.delete_cookie(‘uid’)
return resp
==================================================================
命令:python3 manage.py startapp note
from django.db import models
from user.models import User
Create your models here.
class Note(models.Model):
title = models.CharField(‘标题’, max_length=100)
content = models.TextField(‘内容’)
create_time = models.DateTimeField(‘创建时间’, auto_now_add=True)
update_time = models.DateTimeField(‘更新时间’, auto_now=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
- 命令1:
python3 manage.py makemigrations
.
- 命令2:
python3 manage.py migrate
- url:/note/all
现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。
分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ue)
update_time = models.DateTimeField(‘更新时间’, auto_now=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
- 命令1:
python3 manage.py makemigrations
.
- 命令2:
python3 manage.py migrate
- url:/note/all
现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。
分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-UGP2mOae-1713620264362)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!