Django & DRF & Angular 101, 섹션 3.3

소멜

  • Introduction
  • Modèles
  • Utilisateurs et rôles Django

  • Authentification & JWT
  • JWT
  • Angular
  • Guards

  • Modules
  • Gestion
  • Consultation
  • Conclusion et sources
  • 소개하다.

  • SET NULL:remetnull la valeur(모두의 위치)
  • 캐스케이드: 공급망 공급망
  • 보호: 신뢰할 수 없고 발할 수 없고 발할 수 없는 예외
  • 기본값 설정: prend la valeur pardéfaut
    :SET:une autre entitépour remplacer
  • effectueunon_delete에 스티커를 붓다.

    데양고세리 호텔, DRF 호텔과 앙겔 호텔 l'authentification Angular avec Django는 UN 토큰인 JWT avec les Libraries drf JWT c ôté Django et@auth0/Angular JWT c ôtéfront 데양고 위병의 사용: 미슈 쿠슈하트 여사, 생활과 예술 도서관의 영사 이것은 격정이 충만한 모듈이다 모델레스

    On va enrichir notre librairie, notamment sur les livres :

    • ajouter un résumé
    • modifier la contrainte de suppression models.CASCADE sur l'auteur : en effet, actuellement, la suppression d'un autre supprime également...tous ses livres, le ForeignKey provoque cette action. On va, à la place, mettre NULL à la on_delete lorsqu'un auteur est supprimé, on aura des livres orphelins mais au moins on les conserve !
    class Book(TimeStampedModel):
        name = models.CharField(max_length=100, null=False, blank=False, db_index=True)
        summary = models.TextField(null=True, blank=True)
        nb_pages = models.IntegerField()
    
        author = models.ForeignKey(Author,
                                   related_name='books',
                                   null=True,
                                   on_delete=models.SET_NULL)
    
        enabled = models.BooleanField(default=True, help_text='disponible ou non')
    
        def __str__(self):
            return '{} : {}'.format(self.name, self.author)
    
    le
    이 책의 작자는 때가 낀 작자이다
    python3 manage.py makemigrations --name 'book_upgrade_s
    ummary_author' && python3 manage.py migrate

    이것은 허가를 받지 않은 새로운 집단이다

    오콘 단체와 허가 없이 성모원 고문과 평론가들은 미추를 사용하지 않았다.

    만약 충분한 허가가 있다면 당신의 생활에 지원/수정/지원/자문을 제공하여 당신의'관리'팀을 당신의 생활과 사업의 지도자로 만들 수 있습니다. 모든 사람은 가정 수업이 있고, 우리 학생들은 모두 행정 수업이 있으며, 우리 학생들은 모두 후방 수업이 있다...사용자, 단체 및 라이센스의 각도 유형입니다. 고급 관리자(플랫폼/관리자), 팀원, 외부 팀원'gestionnaire'및livres와Auters 지역의 변호사 그룹: Ajouter 사용자 및 rôles: 사용자 및 그룹 Django

    .
    세트 강변의 바세라 거리에서 뿔로 물을 주고 뿔로 물을 준다.

    JWT

    La méthode d'authentification qui s'est imposée depuis quelques années avec les SPA ou les applications mobiles est basée sur le token .
    JWTétant unJWT은 세 가지로 구성되어 있다. 제목이다.유효 하중.서명하다.
  • 기호화폐 사용 알고리즘
  • 유효 하중les méta données(comme la date d'exp)와 donées ajoutées(사용자 이름)
  • 상징적인 기호화폐(이것은 고급 기호화폐......기호화폐로 여러 장소에 사용할 수 있는 비밀 기호화폐이다).
  • L'extension Django/DRF utilisée est: ajoutédansles 요구 사항.txt
    예를 들어, 타사 , 타사api token auth puis saisir le login and mot de passe défini pour gest1

    aura comme résultat에서 JSON 형식으로 정보를 제공하여 참고로 제공
    {
      "pk": 1587895563,
      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6Imdlc3QxIiwiaWF0IjoxNTg3ODk1NTYzLCJleHAiOjE1ODc5MDk5NjMsInVzZXJfaWQiOjMsIm9yaWdfaWF0IjoxNTg3ODk1NTYzfQ.zBPgmxxbTKbg6_2cFEdOTg1G3JOk0QIhRlEam8EU7AA",
      "user": {
        "id": 3,
        "username": "gest1",
        "email": "[email protected]",
        "is_superuser": false,
        "is_staff": false
      },
      "refresh_url": "/api-token-refresh/",
      "token_verify_url": "/api-token-verify/"
    }
    
    인증 프로세스:
  • 탐색기: 로그인
  • POST sur api token auth du login/passe
  • 종업원: 로그인/통행증 검증, JWT 권한 수여
  • 탐색기: 로컬 스토리지의 토큰 및 스토리지
  • 우리의 새로운 삶은 희망으로 가득 차 있다Authorization: Bearer token 잠재원소 détecter l'Usiliateur côdjango
  • 이것은 무상태 응용 프로그램(sansétat, revoir la partie consacrée sur), tout est portépar l'url/API입니다.Ici, 이용자가 권한을 부여한 최신 특사는 이용자와/또는 당신의 허가증에 서비스를 제공할 것입니다.
    apr eélela token 애플리케이션 엔클로저
    export function tokenGetter(): string {
      return localStorage.getItem('token');
    }
    
    imports: [
        // ...
        JwtModule.forRoot({
          config: {
            tokenGetter,
            whitelistedDomains: ['localhost:4200', 'plateform'],
            blacklistedRoutes: [],
            skipWhenExpired: true,
          }
        }),
       // ...
    ]
    
    Unschéma simple du flux(프리스대학cet 우수L'objectif est d'utilisé l'API d'authentification pour obtenir un jeton
    JWT
    @auth0/angular jwt Ajutera automatiquementètous les appels API l'entète 라이센스(유엔 Http Interceptor를 통해)를 연결하면 "interprétera DRF pour déterminer sil'use a les droits grèce aux"tokenGetter()로 표시됩니다.
    익명
    standard du W3C
    En mode connectéavec le compte gest1 gestionnaire
    drf-jwt

    http://plateform 각도 인증

    article 코트디부아르 전선.도서관 서비스부permission_classes는 노틀 타체 도서관에 서비스를 제공하고 기호화폐 JWT에 소급 서비스를 제공하며 API에 자동 주사 서비스를 제공한다JwtHelperService(감사는 도서관 서비스)
    서비스 권한 수여 서비스에서 로그인과 로그아웃은 모두 유효하며 각종 실용 도구(연결, 영패 획득, 영패 사용 등)를 사용할 수 있다.

    서비스 승인 서비스


    로컬 저장소에서 권한 수여자와 사용자의 사용권과 사용권의 대상은 @auth0/angular jwt pourra ainsi Retroverce token gr –ceála FontionAuthorization: Bearer tokenvu précédemment입니다.tokenGetter 우리의 서비스는 차세대 연결이고 그 구성 부분은 간단하다.
    
    @Injectable({ providedIn: 'root' })
    export class AuthService {
      private user: User;
      private url = `${environment.baseUrl}/api-token-auth/`;
      private userSource = new ReplaySubject<User>(1);
      userActivate$ = this.userSource.asObservable();
    
      constructor(private http: HttpClient,
                  private jwtService: JwtHelperService) {
      }
      /**
       * Authentification /api-token-auth/
       * @param {UserAuthent} user : l'utilisateur a connecté
       * @return any dont token
       */ 
      logon(user: UserAuthent): Observable<any> {
        const headers = new HttpHeaders({
          'Content-Type': 'application/json', Accept: 'application/json'
        });
        return this.http
          .post(this.url, { username: user.username, password: user.password }, {headers})
          .pipe(map(dataJwt => this._authenticated(dataJwt)));
      }
      /**
       Déconnexion, on supprime tout ce qui est relatif au connecté et son 
       token 
      */
      logout() {
        localStorage.removeItem('token');
        localStorage.removeItem('user');
      }
      isAuthenticated() {
        return !this.jwtService.isTokenExpired();
      }
      /**
       * Stockage du token et de quelques informations user
       * @param data
       * @private
       */
      private _authenticated(data: any): User {
        localStorage.setItem('token', data.token);
        localStorage.setItem('user', JSON.stringify(data.user));
        this.userSource.next(data.user as User);
        return data;
      }
    }
    

    구성 요소 Banière de connexion


    이 부분에서 우리는 연결된 반니에, 데넬, 부톤 상소위원회userActivate$와 서비스 작성자 서비스센터(que l'On a cré,au retour si tout est bon,Redrige vers la page d'accueil)를 보았다.연결하는 과정에서 유엔의 정보는 고정되어 있고 연결의 정확한 페이지에 나타난다.

    On utilisera le module
    @auth0/angular-jwt
    login() {
        this.loading = true;
        this.authService.logon(this.model)
          .pipe(finalize(() => this.loading = false))
          .subscribe(data => {
            if (data.token) {
              this.router.navigate(['/']);
              }
          },
          error => {
            this.loading = false;
            if (error instanceof HttpErrorResponse && error.status === 400) {
              const message =  error.error.non_field_errors[0];
              this.message = {
                message, label: '',
                color: 'red', icon: 'error'
              };
            } else {
              throw error;
            }
          }
        );
      }
    

    HttpInterceptor 인증

    (이것은 진정한 노선의 계속과 충전)과 잠재 요소(이것은 전형적인 충전 모듈이다).
    우리는 지도적인 지도 방침을 제정해야 한다. 이것은 지도적인 지도 방침이자 지도적인 지도 방침이다.
    위병지휘지휘지휘:지휘logon()테스트는 지휘를 연결하는 테스트로 관찰할 수 없는 isGestionnaire()당신true테스트의 결과입니다.J'ususe lefalseenécoutant le SubjectUserGroupsService,chaque connexion and donc le nouveau connecté,je peux tester son groupe d'appartance.
    @Injectable({ providedIn: 'root'})
    export class GestionnaireGuard implements CanLoad, CanActivate {
      constructor(private userGrpService: UserGroupsService) {
      }
    
      canLoad(route: Route): Observable<boolean> {
        return this.isGestionnaire();
      }
      canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>  {
        return this.isGestionnaire();
      }
    
      private isGestionnaire(): Observable<boolean> {
        return new Observable<boolean>(observer => {
          this.userGrpService.connecte$.subscribe(connecte => {
              observer.next(this._gestionnaire(connecte));
              observer.complete();
            }
          );
        });
      }
      private _gestionnaire(connecte: UserGroups) {
        return this.userGrpService.hasRole(connecte, roles.gestionnaire) ||
               this.userGrpService.hasRole(connecte, roles.admin);
      }
    }
    
    
    경호원이 없으면 충분합니다. 저희는 내무부,ici와 관리부서의 노선에서 사용할 수 있습니다.
    응용 프로그램.경로ts,화이팅
    // ...
    const appRoutes: Routes = [
      {
        path: '',
        children: [
          {path: '', component: BooksListComponent},
          {path: 'gestion', loadChildren: () => import('./gestion/gestion.module').then(m => {
            return m.GestionModule; }), canLoad: [GestionnaireGuard], canActivate: [GestionnaireGuard]}
        ]
      },
      {path: '**', component: NotFoundComponent},
    ];
    // ...
    
    etcé 모듈 제스처, 제스처 루트.모듈이것은 간단한 방법으로 모듈의 제스처를 통해 노선을 제어할 수 있고, 로드 지연을 통해 실현할 수 있다
    // ...
    const routes: Routes = [
      {
       path: '',
       canLoad: [GestionnaireGuard], canActivate: [GestionnaireGuard],
       children: [
        {path: 'book/edit', component: BookEditComponent},
        {path: 'author/edit', component: AuthorEditComponent}
       ]
     }
    ];
    // ...
    
    경비원은 연결과 허가된 노선을 통해'vues'구역을 통제한다.

    경비원

    Les guards vont nous permettre de restreindre l'accès aux routes suivant des règles de gestion sur des rôles, à l'aide de 1 ou 2 interfaces : CanActivate(비용 차이): 사용료 신청 비용의 경제적 손실은'페이지'를 예로 들 수 있다.Cela peut servir aussiá는 응용 프로그램 구성 요소의 일부입니다.
    Dans notre Appliance, aura les 모듈 suivants:
  • 모듈 담당자, 존재자, 응용 프로그램 허가증 소지자: AppModule(app.module.ts)
  • 유엔 모듈 관리 모듈(gestion.module.ts)은 독특한 서비스로 생활과 작가의 관리에 사용된다.
  • 유엔 모듈 횡방향 공공 도서관 모듈 qui contiendra POTELIELEMENT des Components PARA les 2 모듈 프로젝트
  • 능숙하다 손짓

    이러한 모듈의 각도 방향은 충전기의 각도 방향과 다르다. 그들의 조합(그리고 변화무쌍한 조합)은 특정한 시간, 하나의 용어, 특정한 시간, 특정한 시간, 특정한 시간, 특정한 시간, 특정한 시간, 특정한 시간, 특정한 시간, 특정한 시간, 특정한 시간, 로드 지연

    모듈 권장 사항: les livres 편집:편집/억제 작가: 편집/억압 이것은 전형적인 소화 때의 일종이다. 단스의 손짓, 우리 오룡의 손짓.모듈이것은 구성 요소를 이용하여 노선 계획을 하는 방법이다.모듈손짓을 하다. 원칙적인 응용 노선에서 저는 당신의 수요(생활과 감독의 요구에 따라)와 적당한 위병, 우리의aurons dans 응용 프로그램을 만족시킬 수 있습니다.경로두 번째 부분은 제스처: dès qu'une route sur/gesting est appelée(/gestion/author/edit et/gestion/book/edit), le module gestion.모듈est chargée(즉, 출처와 비용) 시공 허가: 노선=[ { 경로: "", 어린이: [ {경로: \", 구성 요소: BookListComponent}, {path:'authent',component:LoginComponent}, {path:'login',component:LoginComponent}, {path:'books',component:bookslist component}, {path:'authors',component:AuthorsListComponent}, {path:'gestion', loadChildren:()=>import('./gestion/gestion.module'). 그리고(m=>{ m.GestionModule;} 반환 ] }, {경로:'**', 구성 요소:NotFoundComponent}, ];

    Les composants de consultations (liste et affichage) font partis du module principal (app.module) car ils sont utilisés soit par les utilisateurs qui consultent mais aussi par les gestionnaire.

    Nous aurons alors une déclaration simple pour les routes app.routing.ts, ici la route / et les routes books ou authors

    const appRoutes: Routes = [
      {
        path: '',
        children: [
          {path: '', component: BooksListComponent},
          {path: 'authent', component: LoginComponent},
          {path: 'login', component: LoginComponent},
          {path: 'books', component: BooksListComponent},
          {path: 'authors', component: AuthorsListComponent},
          {path: 'gestion', loadChildren: () => import('./gestion/gestion.module').then(m => {
            return m.GestionModule; })}
        ]
      },
      {path: '**', component: NotFoundComponent},
    ];
    
    영어 4급 시험 문장.
    Dans un prochaine 기사, nous irons beaucoup plus loin sur le composant'데이터 테이블'은 colonnes와 세포 동력학을 필터하는 조언을 제시하고 일정한 재료를 제공했다.

    좋은 웹페이지 즐겨찾기