请求的转发:
1 :涮新浏览器重新提交表单
2 :只能在项目内部跳转
3 :地址没有改变
重定向:
一次以上的请求和响应,请求地址发生一次以上的变化。
如果此时刷新页面不会出现重做现象
我们需要在我们的 views.py里面导入redirect和reverse模块
1,首先我们要改下views.py里的内容
定义一个函数
def show(request,id):
blogUser=BLogUser.objects.get(pk=id) #通过id找到bloguser
return render(request,'success.html',
{"bloguser":BLogUser})
return redirect(reverse('user:blogshow', args=[bloguser.id]))
2.在app里配一个路径,并添加一个app_name=user;
app_name='user'
urlpatterns = [
path('', views.hello,name='hello'),
path('regist/',views.regist),
path('show/<int:id>',views.show,name='blogshow')
]
3. 在根路径下添加 namespace=user
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/',include('blog.urls',
namespace='user'))
4. 运行我们的项目 点击注册,再刷新地址栏不会有变化了,
看下数据库也不会重复保存
解决注册的时候用户名不能重复问题:
1,在app的models.py文件中添加唯一约束:
userName=models.CharField(max_length=30,unique=True)
2. 删除数据库中重复的名字,并在tools工具栏中重新执行下 makemigrations blog
重新生成一个文件 执行sqlmigrate blog 0002查看执行的sql语句
执行 migrate blog 0002 添加约束成功
3.添加异常处理
try:
bloguser.save()
return redirect(reverse('user:blogshow', args=[bloguser.id]))
except:
return render(request, 'rigist.html',{‘mess’:'用户名已存在'})
现在做一个利用ajax不需要提交当文本框失去焦点的时候就提醒我们用户名是否存在的问题
1,在python_blog中建一个文件夹来导入jquery.js
2,在根目录下的settings.py中设置静态路径
STATICFILES_DIRS=[
os.path.join(BASE_DIR, 'static'),
]
3.打开浏览器输入http://127.0.0.1:8000/static/js/jquery-3.3.1.js 查看是否访问成功
4. 我们在 html页面中加入javascript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
<script type="text/javascript" src="/static/js/jquery-3.3.1.js"> </script>
<script type="text/javascript">
$(function () {
$('#username').blur(function () {
//失去焦点的时候获取用户名
var uname=$(this).val();
var csrftoken=$
("input[name='csrfmiddlewaretoken']").val();
$.ajax({
url:"/blog/hasname",
type:"post",
data:{"uname":uname,"csrfmiddlewaretoken":csrftoken},
dataType:"String",
success:function (result) {
alert(result);
// $("#mess").html(result)
}
});
});
});
</script>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
用户名:<input type="text" name ="username" id="username"/>
<span id="mess">{{ mess}}</span><br/>
用户密码:<input type="password" name="pwd"/><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
5.在app views.py中定义一个函数
def hasname(request):
# post传过来一个uname
username=request.POST.get('uname')
#去数据库查询并返回一个对象
bloguser=BLogUser.objects.filter(userName=username)
#判断对象是否存在
if len(bloguser)==1:
return HttpResponse('用户名已被占用')
else:
return HttpResponse("恭喜你,该用户名可以使用")
6.在app的urls.py下给hasname 配一个路径
urlpatterns = [
path('', views.hello,name='hello'),
path('regist/',views.regist),
path('show/<int:id>',views.show,name='blogshow')
path('hasname',views.hasname)
]
7.在浏览器中输入地址 http://127.0.0.1:8000/blog/regist/