首页 > 编程语言 >16,2024年Python大厂面试分享

16,2024年Python大厂面试分享

时间:2024-03-28 18:31:27浏览次数:27  
标签:username return 16 Python request 2024 session user password

6.3. 路由


6.3.1. 配置分布式路由

tedu_note/urls.py中,将所有user/***相关路由转交给user处理

from django.contrib import admin

from django.urls import path, include

urlpatterns = [

path(‘admin/’, admin.site.urls),

path(‘user/’, include(‘user.urls’))

]

在这里插入图片描述

6.3.2. 配置子路由

from django.urls import path

from . import views

urlpatterns = [

path(‘reg’, views.reg_view)

]

在这里插入图片描述

6.4. 视图函数


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(‘注册成功’)

在这里插入图片描述

6.5. 测试


基础代码编写完成后,进行测试成功

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

七、注册问题 — 优化

======================================================================

  • 密码如何处理

  • 插入问题

  • 产品经理要求注册则免登录一天,如何实现

7.1. 哈希算法


哈希算法 —— 给定明文,计算出一段定长的,不可逆的值

7.1.1. 特点

  • 定长输出:不管明文输入长度为多少,哈希值都是定长的。md5 - 32位16进制

  • 不可逆:无法反向计算出对应的明文

  • 雪崩效应:输入改变,输出必然变

7.1.2. 使用场景

  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. 测试

重新注册查看数据库,存储加密后的密码

在这里插入图片描述

7.2. 并发写入


在数据进行插入执行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(‘注册成功’)

在这里插入图片描述

7.3. 免登录


在session中存储用户信息

免登录一天

request.session[‘username’] = username

request.session[‘uid’] = user.id

八、用户登录

=================================================================

  • url:/user/login

  • 视图函数:login_view

  • 模板位置:templates/user/login.html

  • 页面样式:

  • 流程:

  • 发送GET请求的话,返回界面

  • 点击登录发送POST请求,进行登录

8.1. 模板界面


登录

用户名:

密码:

记住用户名

在这里插入图片描述

8.2. 路由


from django.urls import path

from . import views

urlpatterns = [

path(‘reg’, views.reg_view),

path(‘login’, views.login_view)

]

在这里插入图片描述

8.3. 访问逻辑


在这里插入图片描述

8.4. 视图函数


如果点击记住用户名,则在浏览器端存储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

8.5. 测试


在这里插入图片描述

九、用户登录 — 优化

======================================================================

用户登录流程

获取界面后

  1. 请求登录界面

  2. 服务器端检查session

  3. session有数据的话,直接跳转主界面

  4. session没有数据的话,检查浏览器端cookie,如果cookie有数据,跳转主界面

  5. 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. 创建新项目


10.1.1. 生成项目

$ python3 manage.py startapp index

在这里插入图片描述

10.1.2. 注册

在这里插入图片描述

10.2. 模板界面


首页

{% if request.session.username %}

欢迎{{ request.session.username }}

退出登录

进入我的笔记

{% else %}

{% if request.COOKIES.username %}

欢迎{{ request.COOKIES.username }}

退出登录

进入我的笔记

{% else %}

登录

注册

{% endif %}

{% endif %}

在这里插入图片描述

10.3. 路由


在这里插入图片描述

10.4. 视图函数


def index_view(request):

return render(request, ‘index/index.html’)

在这里插入图片描述

10.5. 测试


在这里插入图片描述

10.6. 修改登录注册视图函数


改为跳转到首页

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

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

最后

标签:username,return,16,Python,request,2024,session,user,password
From: https://blog.csdn.net/qd520_1314/article/details/137111059

相关文章

  • MATLAB和Python交互的问题
    MATLAB和Python交互的一些坑:pythonsetup.pyinstall一定要在MATLAB安装文件夹setup.py的位置运行,使用绝对路径运行setup.py是不允许的,但是python可以用绝对路径参考D:\MATLAB\R2019b\extern\engines\python>D:\Python3.7\python.exe.\setup.pyinstall如果后续更换了MATLA......
  • ISC2016训练赛-phrackCTF-Smali
    ISC2016训练赛-phrackCTFSmali:类型:Reverse**题目描述:都说学好Smali是学习Android逆向的基础,现在刚好有一个smali文件,大家一起分析一下吧~~**解题方法:将题目附件下载下来之后发现是一个.smali文件,将它放进jadx-gui里面进行一下反编译得到:packagenet.bluelotus.tomorrow.eas......
  • 在Python中如何使用协程进行并发操作
    在Python中使用协程进行并发操作是一种高效的方式来处理I/O密集型任务或者在单个Python程序内部执行多个操作。本文将详细介绍如何在Python中使用协程进行并发操作,包括协程的基本概念、如何创建和运行协程、如何使用任务来管理多个协程,以及如何利用协程进行并发网络请求等。最......
  • 想学Python必看!!让你的Python学习之路事半功倍!!(超详细)
    前言在学习编程的路上,许多小伙伴脑子一热毫无规划就开始自学,结果不出一周,就从入门到入土,小编为大家整理了一份入门须知,看完事半功倍!本篇通过以下四块展开,提供大量资源对应。选一个好版本有没有看过《在下坂本,有何贵干?》那个版本可以装B,Python的版本则是你的工作环境。......
  • 20240328每日一题题解
    20240328每日一题题解摘要本文对于2024年3月28日的每日一题进行了问题重述,并将问题拆解为五个步骤,分别进行了详细的讨论与求解,实现了整型与字符串类型的互相转换。并且还指出,在编写C++程序时,需要观察数据范围,在有必要时使用长整型(longlong)存储数据,以免出现整型溢出现象。关键......
  • 2024最新最全Java和Go面经,面试了30多场,终于上岸了!
    ​>本文来自我们技术交流群群友的投稿,未经授权,禁止转载。原文链接:太难了,Java和Go,面试了30多场,终于上岸了!先听一下TA的故事2023年10月份我就做好了离职跳槽的准备,做了3年Java后端开发的我,对自己的技术能力还是很有底气的。之前虽不是一线大厂,也算是比较知名的中厂了。加上前公......
  • Python 字符串转为字典的两种常用方式(接口交互时)
    结论:在做接口时,请求、响应信息,必须要用json格式 原因:常规的字符串转为字典有两种方式,但两种方式都存在一定的问题:1、ast.literal_eval()(包含eval等类型方法)问题1:安全性,(literal_eval安全性好一些,eval不安全)问题2:需要将字符串中的 true false  null  =》 True......
  • centos7下安装nodejs-v16.x
    今天记录一下centos7下安装nodejs-v16.x版本的nodejs官方下载:CNPMBinariesMirror(npmmirror.com)安装步骤1.下载nodejs-v16.x,其地址已经在上方附上2.将下载的"node-v16.13.1-linux-x64.tar.gz"上到/usr/local/nodejs。如果没有nodejs目录,请自行创建3.解压安装包tar-xvf......
  • python执行shell命令并输出日志
    使用npminstall时,由于npminstall控制台输出的构建信息是加载条,之前用的python脚本不能输出,且加载条完之后的输出也不能获取。因为需要使用新的脚本,使用下面的脚本python执行npminstall可以输出加载条之后的日志。process.poll()为返回码,正确运行返回码为0,若不为0则退出系统。w......
  • 想成为一名Python web开发工程师,你需要具备什么技能?
    前言在大家的印象中,Python被广泛的应用在人工智能、自动化运维、自动化测试、机器学习等方向,并且有着不可或缺的作用;但其实Python的应用领域不止这些,Python还可以进行后台开发,正因如此市场上有了Pythonweb开发的岗位需求。那么想要从事Pythonweb开发,需要掌握哪些技能呢?......