03 .29Django注册、 验证、登录

package是一个包,有init文件

directory文件夹就没有


从页面到views配置路径,页面请求,views返回给页面数据。

views到页面有没有配路径

settings里面根路径blog1.urls-->输入blog.urls-->输入regist路径和调用views方法-->views         页面:/blog/regist        包含关系

views功能:读取数据库,页面跳转


页面返回参数:

views:  return render(request,'regist.html',{'mess':'用户名存在'})
返回页面:{{mess}}    #django自带模板


后生成的APP在settings里自己添加


pycharm命令窗口打开:Ctrl+alt+R

1.makemigrations  blog  生成0001文件

2.sqlmigrate  bloguser 0001  使用这个生成sql语句

3.migrate blog 0001  执行到数据库,有表


页面先访问后台,在访问页面,直接访问页面不行


转发:1.刷新浏览器重新提交表单  2、只能在项目内部跳转   3、地址没变,带参数过去,重写。

重定向:把返回的数据拿出来,重新做成新方法。刷新页面,一次以上的请求和响应,请求地址发生一次以上的变化。


1.根路径

path('blog/',include('blog.urls',namespace='user'))

2.
app_name='user'
urlpatterns = [
    path('show/<int:id>',views.show,name='blogShow'),
]
3.
 
 
def show(request,id):
    bloguser=BlogUser.objects.get(pk=id)
    return render(request,'suc.html',{'bloguser':bloguser})
 
 
def regist(request):
    if request.method=='GET':
        return render(request,'regist.html')
    else:
        uname=request.POST.get('username')
        pwd=request.POST.get('pwd')
        bloguser=BlogUser()
        bloguser.userName=uname
        bloguser.pwd=pwd
        try:
            bloguser.save()
            print('save  ok...')
            return redirect(reverse('user:blogShow', args=[bloguser.id]))#重定向
        except:
            return render(request,'regist.html',{'mess':'用户名存在'})
       


数据库用户名不能重复:

在models.py设置unique=True在创建表     或者直接在数据库改

再重新修改表,先将重复数据删掉

在输入重复的,save报异常,系统崩溃,添加try捕获异常

def regist(requset):
    if requset.method=='GET':
        return render(requset,'regist.html')
    else:
        uname=requset.POST.get('username')
        pwd=requset.POST.get('pwd')
        bloguser=BlogUser()
        bloguser.userName=uname
        bloguser.pwd=pwd
        try:
            bloguser.save()
            print(1)
            return redirect(reverse('heihei:haha',args=[bloguser.id]))  # app_name:name  路径:heihei下的haha   不是页面,可以跳转页面,但是不好带参数,写一个新方法,
            # args是传参数, 将参数传过去
        except:
            return render(requset,'regist.html',{'mess2':'用户名有了亲!'})
这样晚了,点注册才报重复异常。



用ajax捕获重复异常:用jQuery实现,简单,用JavaScript也可以实现,麻烦

使用js文件,放在静态文件里。template里,是外面,所有app都能用,放blog2里,别的不能用。有mini版全是英文jQuery.min.js

创建文件夹static,不是package包,他会生成init文件。

在settings配置静态文件和路径:

STATICFILES_DIRS=[#这是目录,路径和目录建立映射关系,如果路径和目录是一样名字,容易看出来你的目录结构
    os.path.join(BASE_DIR, 'static')    
]
STATIC_URL='/static/'#路径   




STATIC_URL='/static/'   #前面有杠就是根路径,没杠是当前路径

http://127.0.0.1:8000/  是根路径
 
 

用ajax   把jQuery拿进来

AJAX传输数据格式有三种:HTML、json、xml

有$.ajax、$.post、$.get三种方式。

网站和后台交互基本都是ajax,很少用表单了。

 
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
    <script type="text/javascript" src="/static/js/jquery-1.11.1%20.js"></script>{% comment %}#放入jquery文件{% endcomment %}
    <script type="text/javascript">
        $(function () {{% comment %}ajax异步请求,实现鼠标移开的效果{% endcomment %}
            $('#username'){% comment %}或者'input[name="username"]'{% endcomment %}.blur(function () {{% comment %}光标划过用户名{% endcomment %}
                //失去光标获取用户名
                var uname=$(this).val();{% comment %}获取用户名的值{% endcomment %}
                var csrftoken=$("input[name='csrfmiddlewaretoken']").val(){% comment %}#获取token的值{% endcomment %}
                $.ajax({//用ajax或post实现都可以,因为有了光标移开,所以添加js,用ajax简单
                    url: '/blog2/hasname',//路径到后台
                    type: 'post',//请求方式

                    data: {'uname': uname,'csrfmiddlewaretoken':csrftoken},{% comment %}用的是json格式,将获取的用户名和token通过ajax以键值对形式将键和值传给后台{% endcomment %}
                    success:function (result) {
                        //alert(result)
                        $('#mess').html(result){% comment %}把ajax请求回来的值放在html里{% endcomment %}
                    }
                })
            })
        })
    </script>
</head>
<body>
<form method="post">
    {% csrf_token %}{% comment %}也可以在这加onblur{% endcomment %}
    用户名:<input type="text" name="username" id="username"><span id="mess">{{ mess2 }}</span><br>
    密码:  &nbsp;<input type="password" name="pwd"><br>
    <input type="submit" value="注册">
</form>
</body>
</html>

在后台创建hasname函数:


from django.views.decorators.csrf import csrf_protect#导入csrf
@csrf_protect
def hasname(request):
    username=request.POST.get('uname')#后台接受ajax发送过来的用户名
    bloguser=BlogUser.objects.filter(userName=username)#返回的是set集合,所以都不是none,筛选数据库用户名和输入用户名相同的,返回一个对象集合
    if len(bloguser)>0:#用长度
        return HttpResponse('<font color="red">用户名有啦!<font>')#返回结果
    else:
        return HttpResponse('<font color="blue">可用</font>')


登录:






猜你喜欢

转载自blog.csdn.net/gaoshiqi5322688/article/details/79757917