2024年41,百度java面试题

Java面试核心知识点笔记

其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

Java中高级面试高频考点整理

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

最后分享Java进阶学习及面试必备的视频教学

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

class LoginResponse(View):

def get(self,request):

return “登录页面”

def post(self):

“”"

登录逻辑

:return:

“”"

pass

class RegisterResponse(View):

def get(self, request):

return “注册页面”

def post(self):

“”"

注册逻辑

:return:

“”"

pass

“”"

微信公众号:孤寒者

欢迎关注,持续分享干货文章~

如有问题也可关注微信公众号咨询哦!

“”"

def logout(request):

“”"

退出登录

:param request:

:return:

“”"

pass

(2)登录注册登出路径配置:

(mucis/urls.py文件~)

from django.urls import path

from mucis import views

urlpatterns = [

path(‘login/’, views.LoginResponse.as_view(), name=“login”), # 登录

path(‘register/’, views.RegisterResponse.as_view(), name=“register”), # 注册

path(‘logout/’, views.logout, name=“logout”), # 退出

]

(2)登录注册登出前端模板框架编写:

(templates/mucis/login.html文件~)

登录

{% csrf_token %}

登录

用户名:

密码:

登录

(templates/mucis/register.html文件~)

需要注意的是:别看我这注册和登录的页面一模一样,你就以为这俩直接共用一个模板就行了!真正使用的时候注册需要的信息是比登录要多,所以这俩不可能使用同一个模板。本处为了方便讲解,所以只建了个含有用户名和密码的模型。所以会造成注册和登录可以用同一个模板的假象!

不信你看我在下面注册模板中又随便加了个输入框,但是其实它没用,我只是为了强调这个问题!

注册

{% csrf_token %}

注册

用户名:

密码:

手机号:

注册

3.登录注册登出逻辑实现


简单分析登录注册逻辑实现,以登录逻辑实现为例讲个问题:

问题引入——当编写登录逻辑的时候,需要对form表单中用户提交过来的数据进行简单的校验。之前我对其进行校验都是直接在视图函数中使用if进行,确实可以,但是有B格吗?没有,所以咱不那样干了这次!

其实,不那样用的最主要的原因是:django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性还可以用来生成HTML代码!!!

在这里插入图片描述

(1)纯理论来讲讲form表单:

①form表单的引入:
  • 登录页面和注册页面都会用到form表单来提交数据

  • 当数据提交到后台后,需要在视图函数中去验证数据的合法性.

  • django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性还可以用来生成HTML代码

  • 所以这个登录注册案例我们就来使用这个django自带的form来生成前端页面以及验证数据.

②关于django form表单的使用:
  1. 创建一个forms.py的文件,放在指定的app当中,然后在里面写表单.

  2. 表单是通过类实现的,继承自forms.Form,然后在里面定义要验证的字段.

  3. 在表单中,创建字段跟模型是一模一样的,但是没有null=True或者blank=True等这几种参数了,有的参数是required=True/False.

  4. 使用is_valid()方法可以验证用户提交的数据是否合法,而且HTML表单元素的name必须和django中的表单的name保持一致,否则匹配不到.(比如此例中request.POST获取的HTML表单元素的name属性值与form表单中的name是一样的:username,password)

  5. is_bound属性:用来表示form是否绑定了数据,如果绑定了,则返回True,否则返回False.

  6. cleaned_data:这个是在is_valid()返回True的时候,保存用户提交上来的数据.

③form表单中的一些参数说明:
  • max_length 最大长度

  • min_length 最小长度

  • widget 负责渲染网页上HTML 表单的输入元素和提取提交的原始数据

  • attrs 包含渲染后的Widget 将要设置的HTML 属性

  • error_messages 报错信息

注:虽然form可以生成前端页面,但这个功能实际用的少,主要是是用form表单的验证功能!

(2)在本案例中实战使用这个form表单:

在此名为mucis的app下创建forms.py的文件,编写表单校验(用户登录和注册的数据校验):

from django import forms

from django.core.validators import RegexValidator #导入校验器,供下面验证电话号码用

#校验登录

class LoginForm(forms.Form):

#长度校验/非空提醒

username = forms.CharField(max_length=16,min_length=6,error_messages=

{“max_length”:“长度不能超过16位”,

“min_length”:“长度不能小于6位”,

“required”:“用户名不能为空”

})

password = forms.CharField(max_length=16,min_length=6,error_messages=

{“max_length”:“长度不能超过16位”,

“min_length”:“长度不能小于6位”,

“required”: “密码不能为空”

})

“”“”

解释如下注释的原因:

下面这个函数clean()是用于进行数据验证的,本来我想也写在此form表单校验里,但是后面在视图函数里写业务逻辑时发现,

如果验证成功,用户需要登录->这就意味着需要设置session,而session是通过request对象来设置,在视图函数里直接有,可以直接使用;

而如果在此form表单校验里写的话还需要导入,是不是多此一举了,所以此处注释,本逻辑在视图函数里完成!

“”"

def clean(self): # 前端表单用户输入的数据经过上面过滤后再结合后台数据库所有数据进行分析

# 校验数据库中是否有该用户

# 1.拿取用户名和密码

username = self.cleaned_data.get(“username”)

password = self.cleaned_data.get(“password”)

# 2.进行判断

user = User.objects.filter(username=username, password=password)

return user if user else None

#校验注册

class RegisterFrom(forms.Form):

长度校验/非空提醒

username = forms.CharField(max_length=16, min_length=6, error_messages=

{“max_length”: “长度不能超过16位”,

“min_length”: “长度不能小于6位”,

“required”: “用户名不能为空”

})

password = forms.CharField(max_length=16, min_length=6, error_messages=

{“max_length”: “长度不能超过16位”,

“min_length”: “长度不能小于6位”,

“required”: “密码不能为空”

})

phone = forms.CharField(max_length=11, min_length=1, validators=[RegexValidator(r"^1[3-9][0-9]{9}$",“手机号格式有误!”)],error_messages=

{“max_length”: “手机号只能为11位”,

“min_length”: “手机号只能为11位”,

“required”: “手机号不能为空”

})

(3)视图函数业务逻辑完善:

from django.http import HttpResponse

from django.shortcuts import render, redirect

from django.urls import reverse

from django.views import View #使用类视图,要导入!

from .models import User

from .forms import LoginForm, RegisterFrom

class LoginResponse(View):

def get(self,request):

username = request.session.get(“username”)

return render(request, “mucis/login.html”, context={“username”:username})

def post(self, request):

“”"

登录逻辑

:return:

“”"

言尽于此,完结

无论是一个初级的 coder,高级的程序员,还是顶级的系统架构师,应该都有深刻的领会到设计模式的重要性。

  • 第一,设计模式能让专业人之间交流方便,如下:

程序员A:这里我用了XXX设计模式

程序员B:那我大致了解你程序的设计思路了

  • 第二,易维护

项目经理:今天客户有这样一个需求…

程序员:明白了,这里我使用了XXX设计模式,所以改起来很快

  • 第三,设计模式是编程经验的总结

程序员A:B,你怎么想到要这样去构建你的代码

程序员B:在我学习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题

  • 第四,学习设计模式并不是必须的

程序员A:B,你这段代码使用的是XXX设计模式对吗?

程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的

image

从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余!

image

搜集费时费力,能看到此处的都是真爱!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题

  • 第四,学习设计模式并不是必须的

程序员A:B,你这段代码使用的是XXX设计模式对吗?

程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的

[外链图片转存中…(img-9hqjeUSN-1714962691315)]

从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余!

[外链图片转存中…(img-7OAUJJ3d-1714962691316)]

搜集费时费力,能看到此处的都是真爱!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 26
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
插件使用配置(config)还是很灵活的,当然也是弊端,配置不当,效果就没了。 使用时候,重要的参数如下(此demo参数配置点击右键看源码): url: 'http://suggest.taobao.com/sug?code=utf-8&extras=1', queryName: 'q', //url?queryName=value,默认为输入框的name属性 jsonp: 'callback', //设置此参数名,将开启jsonp跨域功能(我要调淘宝数据,非跨域不可,淘宝的回调参数名就是callback),否则使用json数据结构 item: 'li', //下拉提示项目单位的选择器,默认一个li是一条提示,与processData写法相关。 processData: function(data){ }//自定义处理返回的数据,该方法可以return一个html字符串或jquery对象,将被写入到提示的下拉层中。 右键查看源码,将看到本demo所编写的processData函数是怎样的,所以这个参数是把如何表现交给你来做了,但别忘了配合 item 参数 getCurrItemValue: function($currItem){ }//定义如何去取得当前提示项目的值并返回值,插件根据此函数获取当前提示项目的值,并填入input中,此方法应根据processData参数来定义。 是的,如果你自定义了processData,这个参数恐怕也需要自定义,默认是获取$currItem.html(),你也可以return $currItem.attr('an attrName'); 右键查看源码,将看到本demo所编写的getCurrItemValue函数是怎样的 textchange: function($input){}, //不同于change事件在失去焦点触发,inchange依赖本插件,只要内容有变化,就会触发,并传入input对象 onselect: function($currItem){} //当选择了下拉的当前项目时执行,并传入当前项目。比如选择了某个提示项目,就提交表单。 sequential: 0, //按着方向键不动是否可以持续选择,默认不可以,设置值可以是任何等价的boolean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值