zoukankan      html  css  js  c++  java
  • 项目过程中笔记

    1. 在HTML页面中,最好使用{% load static %}动态生成静态文件路径,

    Django帮我们别名和后面的路径拼接成完整的路径,这样就不用担心静态文件的别名被更改了.
    <link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}">
    图片也是静态文件<img src="{% static 'images/logo02.png' %}">

    2. (反向解析name=)

    因为我们建立了多个app,然后新建了一个apps,将各app都放到apps下面,我们需要用到二级路由,在各app的urls里面,

    我们也需要先导入

    from user import views

    然后给各url起个别名,利用反向解析,找到url的正则地址,然后通过正则地址,执行相应的函数,这样和动态生成静态文件路径一样,不担心正则匹配的url地址,被改动了
    url(r'^register$',views.register,name='register'),

    3.Views视图,我个人更倾向于CBV,CBV需要导入View

    from django.views import View,然后类继承于View.

    class Register(View):比如注册视图

    4.返回HTML时,不需要加路径

    因为在settings.py里面已经配置好了TEMPLEATS的路径,DIRS': [os.path.join(BASE_DIR, 'templates')],

    所以return render(request, 'register.html')时候,'html不需要加路径'
    def get(self, request):
            return render(request, 'register.html')

    5.urls.py里面导入views

    因为settings.py里面已经加入了apps的搜索路径
    import sys
    sys.path.insert(0,os.path.join(BASE_DIR,'apps'))
    所以本来应该写成from apps.user import views,但是也可以就写成from user import views

    from user import views
    urlpatterns = [
        # 因为我使用的是CBV
        # url(r'^register$',views.register,name='register'),
        url(r'^register$',views.Register.as_view(),name='register'),
    ]

    6.问题:

    RuntimeError: Model class apps.users.models.UserProfile doesn't declare an explicit app_label and either isn't in 
    an application in INSTALLED_APPS or else was imported before its application was loaded.
    1. 确认是否在settings.py里面添加了apps路径:
      sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
    2. 确实是否在settings.py里面的 INSTALLED_APPS 里进行了注册

        apps.你的app名称就可以了。而不是'apps.order.apps.OrderConfig', # 订单模块

    7.业务逻辑流程(比如注册业务处理)

    1. 接受数据
    2. 进行数据校验
    3. 进行业务处理
    4. 进行应答
     1 class RegisterHandle(View):
     2     '''注册注册逻辑处理'''
     3     # 接受数据
     4     # 进行数据校验
     5     # 进行业务处理
     6     # 进行应答
     7 
     8     def get(self, request):
     9 
    10         pass
    11 
    12     def post(self, request):
    13         '''业务处理流程'''
    14         # 接受数据
    15         username = request.POST.get('user_name')
    16         password = request.POST.get('pwd')
    17         re_password = request.POST.get('re_pwd')
    18         email = request.POST.get('email')
    19         allow = request.POST.get('allow') # 是否同意协议
    20         print('allow:',allow)
    21 
    22         # 进行数据校验
    23         # 这儿引出一个all()方法,参数为可迭代对象,也就是列表,元组等,all():如果所有可迭代对象都为True,那么返回True,否则返回False
    24         if not all([username, password, re_password, email]):
    25             # 如果数据不完整,返回提示
    26             return render(request, 'register.html', {'error_msg_all': '数据不完整!'})
    27 
    28         # 进行邮箱校验
    29         if not re.match(r'^[a-z0-9][w.-]*@[a-z0-9-]+(.[a-z]{2,5}){1,2}$', email):
    30             return render(request, 'register.html', {'error_msg_email':'邮箱格式不正确!'})
    31         # 校验两次输入的密码是否一致
    32         if password != re_password:
    33             return render(request, 'register.html', {'error_msg_same':'两次输入密码不一致!'})
    34 
    35         # 校验是否同意协议
    36         # 如果单选框被选中,返回on,如果没有被选中,返回None.
    37         if not allow:
    38             return render(request, 'register.html',{'error_msg_agree':'请同意协议!'})
    39 
    40         # 校验用户名是否重复
    41         try:
    42             user = models.User.objects.get(username=username)
    43         except models.User.DoesNotExist:
    44             # 抛出异常说明,数据库中没有此用户,那么同意注册该用户
    45             user = None
    46         if user:
    47             # 如果用户名存在,则不同意注册,返回提示
    48             return render(request, 'register.html', {'error_msg_user': '用户名已被注册!'})
    49         # 如果用户名没有被注册,那么进行用户注册:
    50         # 这儿注册要用create_user(...),这样密码会以密文形式保存,
    51         # 注册方法一:(推荐)
    52         # from django.contrib.auth.models import User
    53         # User.objects.create_user(username, email, password)
    54         # 注册方法二:
    55         # from apps.user import models
    56         # user = models.User.objects.create_user(username=username, email=email, password=password)
    57         # 注册方法三:(密码非加密)
    58         # from apps.user import models
    59         # user = models.User.objects.create(username=username, email=email, password=password)
    60 
    61         # 这三种注册方式,都会将is_active = 1:也就是激活状态,但是我们一开始不要将它设为激活状态,因为后期需要邮箱激活
    62         user = models.User.objects.create_user(username=username, email=email, password=password)
    63         user.is_active = 0
    64         user.save()
    65         # 手动修改一条数据后,需要save()
    66 
    67         # 这儿用到了命名空间,和name的反向解析
    68         # 实际跳转http://127.0.0.1:8002/index/
    69         return redirect(reverse('goods:index'))
    70 
    71         # return redirect('/index/?type=哈哈/')
    View Code

    8.用户注册,使用Django提供的注册方式

     1 # 校验用户名是否重复
     2         try:
     3             user = models.User.objects.get(username=username)
     4         except models.User.DoesNotExist:
     5             # 抛出异常说明,数据库中没有此用户,那么同意注册该用户
     6             user = None
     7         if user:
     8             # 如果用户名存在,则不同意注册,返回提示
     9             return render(request, 'register.html', {'error_msg_user': '用户名已被注册!'})
    10         # 如果用户名没有被注册,那么进行用户注册:
    11         # 这儿注册要用create_user(...),这样密码会以密文形式保存,
    12         # 注册方法一:(推荐)
    13         # from django.contrib.auth.models import User
    14         # User.objects.create_user(username, email, password)
    15         # 注册方法二:
    16         # from apps.user import models
    17         # user = models.User.objects.create_user(username=username, email=email, password=password)
    18         # 注册方法三:(密码非加密)
    19         # from apps.user import models
    20         # user = models.User.objects.create(username=username, email=email, password=password)
    21 
    22         # 这三种注册方式,都会将is_active = 1:也就是激活状态,但是我们一开始不要将它设为激活状态,因为后期需要邮箱激活
    23         user = models.User.objects.create_user(username=username, email=email, password=password)
    24         user.is_active = 0
    25         user.save()
    26         # 手动修改一条数据后,需要save()
    View Code

    9.request请求路径方式:

    def index(request):
        # 地址栏 127.0.0.1:8000/user/?index=哈哈
        print("1",request.get_host()) # 127.0.0.1:8002
        print("2",request.get_raw_uri()) # 完整的路径,包括网址、路径、参数
        print('3',request.path_info) # 路径,不包含参数: /user/
        print('4',request.get_full_path()) # 路径加参数: /user/?index=%fsafa%/
        # 如果想让其正常显示(有中文的情况下), 需进行如下编码处理【django默认编码是unicode的】
        # request.get_full_path().encode('utf-8')
        # request.path.encode('utf-8')
        return render(request, 'index.html')

    10.form表单中action=‘...’

    如果form表单中action不写,默认往当前路径提交

      



  • 相关阅读:
    一次优化web项目的经历记录(一)
    自己做的萌萌哒的js宠物挂件~
    最近的两个小项目,2:Python webapp的docker镜像
    最近的两个小项目,1:在Vscode里写C/C++
    Markdown写接口文档,自动添加TOC
    使用SqlAlchemy时如何方便的取得dict数据、dumps成Json
    【漏洞预警】SaltStack远程命令执行(CVE-2020-11651、CVE-2020-11652) 植入挖矿木马的应急响应 salt-minions salt-store挖矿程序跑满cpu
    pycharm 常用配置
    gitlab + jenkins + docker + k8s
    Microservice 概念
  • 原文地址:https://www.cnblogs.com/biggw/p/10825740.html
Copyright © 2011-2022 走看看